Centos docker使用笔记
第一步下载docker
yum install docker
service docker start
usermod -aG docker username #将docker 允许username 用户使用不只是root
简单介绍docker 架构
1.docker daemon 是docker的核心,他负责下载docker 镜像,运行dokcer容器,我们输入的命令都是交给docker daemon 来实际操作的。
2.registry是docker 的仓库,所有的docker 镜像存储在里面
简单的操作
docker run ubuntu echo hello world
docker images #可以看到所有docker 的images
docker run -p 8080:80 -d nginx -p #端口映射把远端的80映射到本地的8080, -d 把container 作为守护进程执行的。
curl http://lcoalhost 就能访问到nginx的主页面
docker ps 查看当前运行的容器,最前面是容器的id
docker cp index.html 容器id://usr/share/nginx/html 将文件复制到nginx的服务目录下
docker stop 容器id 停止docker
注意一下:当你结束了这个容器之后我们的容器就会重置,因为docker对容器的改动是默认不保存的
docker commit -m ‘message’ 容器id 保存当前容器,会返回一串id 这个是新产生的容器的id
这时候你使用 docker images 可以看到我们新产生一个没有名字的容器
我们可以在上一条命令后面直接跟上名字
docker commit -m ‘message’ 容器id 名字
docker rmi 容器id 我们使用这个命令把之前的那个无名氏删除
docker ps -a 可以列出曾经的所有容器记录
docker rm 容器1 id 容器2 id 清除记录
dockerfile 自创文件建立docker镜像
FROM alpine:latest #基础镜像
MAINTAINER K0rz3n #作者
CMD echo 'hello world' #命令
mkdir newdocker
cd newdocker
touch Dockerfile
vim Dockerfile
alpine 是专门为docker构建的很小的linux 环境
docker build 构建新的image
docker build -t 标签 . (这个点带表路径,表示把当前路径下的所内容交给docker engine )
docker images 标签 就会显示刚刚产生的docker run 标签 运行docker
FROM ubuntu
MAINTAINER K0rz3n
RUN sed -i 's/archieve.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
CPOY index.html /var/www/html
ENTRYPOINT ['/usr/sbin/nginx','-g','daemon off';] #这个是容器的入点,在命令行中用空格分隔执行的命令
EXPOSE 80 #暴露端口
docker build -t hello_nginx .
docker run -d -p 8000:80 hello_nginx
注意:没有指定ENTRYPOINT 的时候我们使用CMD启动,当指定了ENTRYPOINT 之后我们的CMD就成了ENTRYPOINT 的参数
###docker 中的镜像分层
Dockerfile 中的每一行都产生一个新的层
已经存在image 里面的层都是只读的,一旦一个image 被运行成为一个容器就会产生一个新的层,可读可写,这保证了容器是可以被修改的。
分层的目的是实现不同image 之间的层的共享,减轻服务器的压力。
###volume介绍与基本的使用
能提供独立于容器之外的持久化存储,还能提供容器与容器之间共享的数据
docker run -d --name nginx -v /usr/share/nginx/html nginx
-v 是挂载卷的意思
docker inspect 名字 检查容器
Source 是宿主机的地址
Destination 是容器内部的地址
表示把宿主机的这个地址挂载到了容器中
ls 到这个物理机地址可以看到默认的两个文件
docker exec -it 名字 /bin/bash #进入容器 it表示交互的意思
cd /usr/share/ngnix/html #进入容器的实际目录
exit #退出容器
docker run -p 8080:80 -d -v $PWD/html:/usr/share/nginx/html nginx
# $PWD是shell的一个环境变量,始终指向当前目录#意思是将当前目录下的html 目录挂载到容器的 /usr/share/nginx/html 下,这样在本地修改的东西就会自动同步到容器中,所以这是一个很好的开发环境
mkdir vol3
cd vol3
mkdir data
docker create -v $PWD/data:/var/data --name data_container ubuntu #产生了一个仅有数据的容器并挂载到ubuntu上
docker run -it --volumes-from data_container ubuntu /bin/bash #直接进入了容器
mount 查看ubuntu的挂载
找到/var/mydata 这就是我们挂载的数据
cd /var/data
touch whatever.txt
exit
进入我们的本机的data目录,那么我们就会看到这个在容器中创建的文件,说明我们的挂载是成功的
###Registry 的介绍与使用
这是一个镜像仓库,用户可以往里面上传有用的镜像供更多的用户下载使用。daemon会把镜像从registry中拉下来。
daemon 是守护进程,接收用户的命令
docker search 镜像名 #查找镜像
docker pull 镜像名 # 拉取镜像
docker push 镜像名 #上传字节的镜像
国内的一些仓库
daocloud
时速云
aliyun
docker search whalesay
docker pull docker/whalesay
docker run docker/whalesay cowsay 内容 # 你就会看到画出一个鲸鱼说了内容
docker tag docker/whalesay xx/whalesay 修改tag为 xx/whalesay
docker push xx/whalesay #注意这里面需要一个登陆的操作,需要先有一个账号。
docker login
在网页里登陆dockerhub就会看到自己上传的镜像的细节
compose的下载
安装:Linux为例
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#这里的反引号意思是把这个命令的输出加到字段中,也可以用$()实现,uname -s 返回的是Linux uname -m 返回的是 x86_64
安装好之后我们看一下 /usr/local/bin/docker-compose 这个目录的权限
chmod a+x 修改权限为所人可执行
docker-compose --version 查看版本
###compose 实战搭建ghost博客程序
首先看一下 docker-compose.yaml文件
(yaml 是常见的配置文件的格式,通过缩进表示层级之间的关系)
进入docker 文件
mkdir ghost
cd ghost
mkdir ghost
mkdir nginx
mkdir data
cd ghost
touch Dockerfile
vim Dockerfile
Dockerfile
FROM ghost
COPY ./config.js /var/lib/ghost/config.js
EXPOSE 2368
CMD ["npm","start","--prodection"]
config.js
var path = require['path'],
config;
config ={
prodection:{
url:'http://mytestblog.com',
mail:{},
database:{
client: 'mysql',
connection:{
host: 'db',
user: 'ghost',
password: 'ghost',
database: 'ghost',
port: '3306',
charset: 'utf8'
},
debug: false
},
paths:{
contentPath:path.join(process.env.GHOST_CONYENT,'/')
},
server:{
host:'0.0.0.0',
port:'2368'
}
}
};
回到上层目录,
cd nginx
touch Dockerfile
vim Dockerfile
Dockerfile
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
新建nginx配置文件
touch nginx.conf
nginx.conf
worker_processes 4:
events {worker_connections 1024;}
http {
server {
listen 80;
location / {
proxy_pass http://ghost-app:2368;
}
}
}
touch docker-compose.yml #yml是yaml的语法
vim docker-compose.yml
version: '2'
networks:
ghost:
services:
ghost-app:
build: ghost
networks:
- ghost
depends_on:
- db
ports:
- "2368:2368"
nginx :
build: nginx
networks:
- ghost
depends_on:
- ghost-app
ports:
- "80:80"
db:
image: "mysql:5.7.15"
networks:
ghost:
environment:
MYSQL_ROO_PASSWORD: mysqlroot
MYSQL_USER: ghost
MYSQL_PASSWORD: ghost
volumes:
- $PWD/data:/var/lib/mysql
ports:
- "3306:3306"
注意:
1.以上的yml文件特别注意缩进格式。
2.我们的监听的端口一定不能被占用,如果被占用那么请自行修改。
我们创建了三个文件,ghost nginx 是为了构建镜像用的,data 用来存放博客需要的数据
docker-compose up -d
如果出错了我们修改错误后可以执行以下的命令
docker-compose stop
docker-compose rm
docker-compose build
docker-compose up -d
访问localhost
这样我们的博客系统就上线啦